package com.sh.动态代理.main;

import com.sh.动态代理.IStudentService;
import com.sh.动态代理.handlker.TransactionHandler;
import com.sh.动态代理.impl.StudentServiceImpl;
import com.sh.动态代理.transaction.DaoTransaction;

import java.lang.reflect.Proxy;

public class Test1 {
    public static void main(String[] args) {
        DaoTransaction daoTransaction = new DaoTransaction();  // 增强类对象
        IStudentService studentService = new StudentServiceImpl();   // 目标对象
        // 方法处理拦截器，相当于把增强类对象组装到目标对象中    但是不生成实例对象
        TransactionHandler transactionHandler = new TransactionHandler(daoTransaction, studentService);
        // 生成代理对象实例
        Object o = Proxy.newProxyInstance(
                StudentServiceImpl.class.getClassLoader(),    // 目标对象的类加载器
                StudentServiceImpl.class.getInterfaces(),    // 目标对象实现的接口
                transactionHandler    // 代理对象的方法处理拦截器
        );
        IStudentService proxy = (IStudentService) o;   // 强制转换
        proxy.save();  // 调用代理对象的方法

    }
}
